[S3] フォルダ内のオブジェクトをすべて削除したらフォルダごと削除された
はじめに
こんにちは、パオの人ことさすけです!
今回は、S3 バケットのフォルダにあるオブジェクトをすべて削除した時に、フォルダも消えてしまった!というケースの種明かし的なお話になっています。実はマネジメントコンソールでフォルダを作成した時と、CLI コマンドで作成した時では若干異なっているのです、、。
S3 バケットの「フォルダ」はどういう仕組み?
まず前提として押さえておかなければならない部分が「S3 バケットは実際にフォルダを作成している訳ではない」という点です。
簡単にいうと「キーバリュー型になっているだけ」です。フォルダ配下にオブジェクトを配置したとすると、フォルダ名
というキーに オブジェクト名
というバリューがあるだけという形なんです。
詳細については、下記ブログで検証してくれているので本記事の内容をスッと理解していただくためにもぜひ読んでいただければ幸いです。
それぞれの方法でフォルダを作成
さて、ここからは検証を行なっていきます。
まずはマネジメントコンソールでフォルダを作成してみましょう。
マネジメントコンソール
今回は test-pao-pk10
というバケットにマネジメントコンソールから pao
というフォルダを作成しました。
このフォルダに、以下の「アップロード」からオブジェクトをアップロードします。
オブジェクトが以下のように作成されましたね。
CLI コマンド
次に、CLI コマンドでフォルダを作成しオブジェクトをアップロードしていきます。
下記コマンドを実行してみます。
aws s3 cp /path/to/local/PAO.JPG s3://test-pao-pk10/pk10/PAO.JPG
マネジメントコンソールで確認してみると、以下のように pk10
というフォルダが作成されていました。
フォルダ内にも、先ほど作成した PAO.JPG
が表示されていますね。
マネジメントコンソールと CLI コマンドで作成したフォルダの比較
次にこれまで作成した pao
フォルダと pk10
フォルダの比較をしていきましょう。
下記 CLI コマンドにて、s3://test-pao-pk10
配下にあるファイルの一覧を取得できます。
$ aws s3 ls s3://test-pao-pk10 --recursive
2024-12-20 10:45:19 0 pao/ # マネジメントコンソールで作成したフォルダ
2024-12-20 10:50:09 1485391 pao/PAO.JPG
2024-12-20 10:55:22 1485391 pk10/PAO.JPG # CLI コマンドで作成したフォルダおよびオブジェクト
上記のようにマネジメントコンソールで作成したフォルダ pao
の場合は、pao
というキーに対して 空のバリュー を持つように作成されているため、オブジェクトがなくても フォルダ自体がある種 1 つのオブジェクトとして扱われています。
一方で、CLI コマンドで作成したフォルダ pk10
に関しては、pk10
というキーに対して PAO.JPG
というバリューを持つファイルのみで pk10
に対する 空のバリューがありません。
フォルダ内のオブジェクトを削除してみる
それでは最後に、削除してみましょう。
pk10 フォルダ内のオブジェクトを削除してみる
順番が前後して申し訳ないですが、まずは気になってる方が多いと思われる CLI コマンドで作成されたフォルダ(pk10
)内のオブジェクトを削除してみましょう。
すると上記をみてわかる通り、フォルダ内のオブジェクトを削除しただけで フォルダも削除されてしまいました。
pao フォルダ内のオブジェクトを削除してみる
次に、マネジメントコンソールで作成されたフォルダ(pao
)内のオブジェクトを削除してみましょう。
すると今度はフォルダは残っていますね。先ほど 解説した通りフォルダが 1 つオブジェクトとして扱われているため フォルダ内のオブジェクトを削除してもフォルダは削除されません。
両方のオブジェクトが削除されたこのタイミングで最後にファイルの一覧だけ取得してみましょう。
$ aws s3 ls s3://test-pao-pk10 --recursive
2024-12-20 11:16:17 0 pao/
すると、上記のように pk10
フォルダは削除されており、pao
フォルダのみが残っていることが確認できましたね。
まとめ
お疲れ様でした!ありがとうございました!
まとめとしては以下のとおりですね。
- マネジメントコンソールで作成されたフォルダは オブジェクトのように扱われるため、フォルダ内のオブジェクトを削除しても残る
- CLI コマンドで作成されたフォルダは、フォルダ内のオブジェクトをすべて削除したらフォルダも削除される
個人的には、すごく興味深い内容でした。
検証を行っている最中にフォルダが消えるのはどうしてだろうと思っていたらこんなことになっていたんですね。
参考文献
Amazon S3における「フォルダ」という幻想をぶち壊し、その実体を明らかにする | DevelopersIO
アノテーション株式会社
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。